package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.StringTokenizer;

import modelo.Frase;
import modelo.FraseDAO;

import vista.VistaFrase;
import vista.VistaModeloFraseTabla;


public class ControladorFrase implements ActionListener {
	
	private int fila = 0;

	private VistaFrase ventanaFrase;
	
	//public ControladorFrase(VistaFrase ventanaFrase) {
	public ControladorFrase() {
		super();
		this.ventanaFrase = new VistaFrase();	
		ventanaFrase.pack();
		ventanaFrase.setVisible(true);
		ventanaFrase.setSize(593, 331);	
		ventanaFrase.addListener(this);
		cargarFrases();
	}

	private void cargarFrases(){
		
		FraseDAO fraseDAO = new FraseDAO();
		List<Frase> frase = fraseDAO.consultar();
		this.ventanaFrase.setResultados(new VistaModeloFraseTabla(frase));		

	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		
		String actionCommand = e.getActionCommand();
		
		//System.out.println(actionCommand);
		
		
		if (actionCommand.equals("Incluir"))
		{
			registrarFrase();
			cargarFrases();
		}
				
		if (actionCommand.equals("Cancelar"))
			ventanaFrase.borrarDatos();
		
		if (actionCommand.equals("Pasar"))
		{
			mostrarInfo();
		}
		
		if (actionCommand.equals("Modificar"))
		{
			modificarFrase();
			cargarFrases();
		}
		
		if (actionCommand.equals("Eliminar"))
		{
			eliminarFrase();
			cargarFrases();
		}
		
		
		
		
	}
	
	private void registrarFrase(){
	  	
		int totalPalabras=0;
		int nivel=0;
		boolean sigue = false;
	  	
		try
		{
	    	if(ventanaFrase.getTxtFrase().equals(""))	    		
	    	   
	    		ventanaFrase.mostrarMensaje("Debe llenar todos los datos para poder incluir");
	    	
	    	else
	    	{
	    		totalPalabras = contarPalabras(ventanaFrase.getTxtFrase().getText());
	    		
	    		if (totalPalabras==1){
	    			nivel=1;
	    			sigue=true;
	    		}
	    		else
	    		{
	    			if (totalPalabras>=2 && totalPalabras<=5){
	    				nivel=2;
	    				sigue=true;
	    			}
	    			else
	    			{
	    				if (totalPalabras>=6 && totalPalabras<=10)
	    				{
		    				nivel=3;
	    					sigue=true;
	    				}
	    				else
	    					//System.out.println("Exede el limite de palabras");
	    					ventanaFrase.mostrarMensaje("Exede el limite de palabras");
	    			}
	    		}
	    		
	    		//System.out.println(nivel);
	    		if (sigue){
	    			
		    		FraseDAO fraseDAO = new FraseDAO();
			    	Frase frase = new Frase(ventanaFrase.getTxtFrase().getText(), nivel);		    
			    	
			    	fraseDAO.registrar(frase);
			    	ventanaFrase.mostrarMensaje("La frase fue incluida con exito");
			    	ventanaFrase.borrarDatos();
	    		}
	    	}
		}catch(Exception e)
		{
			ventanaFrase.mostrarMensaje("No pudo registrarce la frase, verifique que los datos sean correctos");
			ventanaFrase.borrarDatos();
		}
	}
	
	private void modificarFrase(){
	  	
		int totalPalabras=0;
		int nivel=0;
	  	int id;
	  	boolean sigue=false;
	  	
		try
		{
			if (ventanaFrase.getTxtId().getText() == ""){
				ventanaFrase.mostrarMensaje("Debe escoger una frase para modificar");		    	
			}else
			{
				id = Integer.parseInt(ventanaFrase.getTxtId().getText());
				
			    	if(ventanaFrase.getTxtFrase().equals(""))
			    		ventanaFrase.mostrarMensaje("Debe llenar todos los datos para poder incluir");	    	
			    	else
			    	{
			    		totalPalabras = contarPalabras(ventanaFrase.getTxtFrase().getText());	    		
			    		
			    		if (totalPalabras==1){
			    			nivel=1;
			    			sigue=true;
			    		}
			    		else
			    		{
			    			if (totalPalabras>=2 && totalPalabras<=5){
			    				nivel=2;
			    				sigue=true;
			    			}
			    			else
			    			{
			    				if (totalPalabras>=6 && totalPalabras<=10){
				    				nivel=3;
				    				sigue=true;
			    				}
			    				else
			    					//System.out.println("Exede el limite de palabras");
			    					ventanaFrase.mostrarMensaje("Exede el limite de palabras");
			    			}
			    		}
			    		
			    		if (sigue){
				    		
			    			FraseDAO fraseDAO = new FraseDAO();
					    	Frase frase = new Frase(id, ventanaFrase.getTxtFrase().getText(), nivel);    
					    	
					    	fraseDAO.modificar(frase);
					    	ventanaFrase.mostrarMensaje("La frase fue modificada con exito");
					    	ventanaFrase.borrarDatos();
			    		}
			    	}
			}
			
		}catch(Exception e)
		{
			ventanaFrase.mostrarMensaje("No pudo registrarce la frase, verifique que los datos sean correctos");
			ventanaFrase.borrarDatos();
		}
	}
	
	public int contarPalabras(String frase){
		
		StringTokenizer st = new StringTokenizer(frase);
		return st.countTokens();
		
	}
	
private void eliminarFrase(){
	  	
		
		
	  	int id;
	  	
	  	
		try
		{
			if (ventanaFrase.getTxtId().getText() == ""){
				ventanaFrase.mostrarMensaje("Debe escoger una frase para eliminar");		    	
			}else
			{
				id = Integer.parseInt(ventanaFrase.getTxtId().getText());
				
			    	
			    			    		
			    		
			    		
			    		
			    		
				    		
			    			FraseDAO fraseDAO = new FraseDAO();
					    	Frase frase = new Frase(id, ventanaFrase.getTxtFrase().getText(), 0);    
					    	
					    	fraseDAO.eliminar(frase);
					    	ventanaFrase.mostrarMensaje("La frase fue eliminada con exito");
					    	ventanaFrase.borrarDatos();
			    		}
			    	
			
			
		}catch(Exception e)
		{
			ventanaFrase.mostrarMensaje("No pudo registrarce la frase, verifique que los datos sean correctos");
			ventanaFrase.borrarDatos();
		}
	}
	public void mostrarInfo(){
		
		int filaF = ventanaFrase.getTabla().getSelectedRow();
		
		
		String id = ventanaFrase.getTabla().getValueAt(filaF, 0).toString();
		String descripcion = ventanaFrase.getTabla().getValueAt(filaF, 1).toString();
		String nivel = ventanaFrase.getTabla().getValueAt(filaF, 2).toString();
		
		ventanaFrase.getTxtId().setText(id);
		ventanaFrase.getTxtFrase().setText(descripcion.trim());
		
	}
	

}
